#ifndef _MYBOOT_H
#define _MYBOOT_H

#include "main.h"

//Xmodem字段定义
#define XMODEM_SOH  0x01
#define XMODEM_STX  0x02
#define XMODEM_EOT  0x04
#define XMODEM_ACK  0x06
#define XMODEM_NAK  0x15
#define XMODEM_CAN  0x18

//定义一个函数指针类型，用于实现设置PC指针
typedef void(*load_a)(void);

//进入命令行终端模式，实现交互功能
//参数：timeout ：超时等待时间
//返回值： 1 进入终端模式    0 不进入终端模式
uint8_t MyBootLoader_EnterCMD(uint16_t timeout);

//BootLoade分支判断
void MyBootLoader_Branch(void);

//设置SP指针，指向addr处
//  __asm 表示是使用汇编
void MSR_SP(uint32_t addr);

//跳转到应用程序
//参数：addr：程序起始地址
void Load_Application(uint32_t addr);

//跳转前复位外设
void BootLoader_Clear(void);

//命令行菜单
void MyBootLoader_Menu(void);

//BootLoader事件处理函数
void MyBootLoader_Event(uint8_t* data,uint32_t datalen);

//Xmodem协议CRC16位校验
uint16_t Xmodem_CRC16(uint8_t *data,uint16_t datalen);

#endif
